﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Componentes
{
    class Animacao
    {
        public Texture2D textura;
        public Vector2 posicao;
        public bool Ativo, Loop;
        public int LarguraJanela, AlturaJanela, contadorJanela, tempoRepeticao, posicaoLenteY, janelaAtual;
        int tempoPassado;

        Rectangle lenteFonte = new Rectangle(), lenteDestino = new Rectangle();

        public Animacao(Texture2D texture, Vector2 posicaoA,
                               int largura, int altura, int contador,
                               int tempo, bool looping, int posLenteY)
        {
            this.LarguraJanela  = largura;
            this.AlturaJanela   = altura;
            this.contadorJanela = contador;
            this.tempoRepeticao = tempo;

            this.Loop = looping;
            this.posicao = posicaoA;
            this.textura = texture;
            this.posicaoLenteY = posLenteY;

            this.tempoPassado = 0;
            this.janelaAtual = 0;

            this.Ativo = true;
        }

        public void Update(GameTime gameTime)
        {
            if (Ativo == false)
                return;

            tempoPassado += (int)gameTime.ElapsedGameTime.TotalMilliseconds;


            if (tempoPassado > tempoRepeticao)
            {
                janelaAtual++;

                if (janelaAtual == contadorJanela)
                {
                    janelaAtual = 0;
                    if (Loop == false)
                        Ativo = false;
                }

                tempoPassado = 0;
            }

            lenteFonte = new Rectangle(janelaAtual * LarguraJanela, posicaoLenteY, LarguraJanela, AlturaJanela);

            lenteDestino = new Rectangle((int)posicao.X - (int)(LarguraJanela) / 2, (int)posicao.Y - (int)(AlturaJanela) / 2, (int)(LarguraJanela), (int)(AlturaJanela));
        }

        public void Draw(SpriteBatch spriteBatch)
        {
            if (Ativo)
            {
                spriteBatch.Draw(textura, lenteDestino, lenteFonte, Color.White);
            }
        }
    }
}
